import TIM from 'tim-wx-sdk';
import COS from "cos-wx-sdk-v5";
import config from './config.js'
import TIMUploadPlugin from 'tim-upload-plugin';
import store from './store.js'
export default {
	tim: {},
	async tim_init(user_id,usersig) {
		// 创建 SDK 实例，`TIM.create()`方法对于同一个 `SDKAppID` 只会返回同一份实例
		this.tim = TIM.create({
			SDKAppID: store.state.config.imset.sdk_appid
		}); // SDK 实例通常用 tim 表示
		// 设置 SDK 日志输出级别，详细分级请参见 <a href="https://imsdk-1252463788.file.myqcloud.com/IM_DOC/Web/SDK.html#setLogLevel">setLogLevel 接口的说明</a>
		this.tim.setLogLevel(1); // 普通级别，日志量较多，接入时建议使用
		// tim.setLogLevel(1); // release 级别，SDK 输出关键信息，生产环境时建议使用
		// 注册腾讯云即时通信 IM 上传插件
		// 注册 COS SDK 插件
		this.tim.registerPlugin({'cos-wx-sdk': COS}); // 在 login 前调用，以支持文件上传腾讯云对象存储
		this.tim.on(TIM.EVENT.MESSAGE_RECEIVED, this.onMessageReceived);
		let imResponse = await this.tim.login({userID: user_id, userSig: usersig})
	},
	// 收到消息
	onMessageReceived(event) {
		// console.log(event);
		store.commit('newMessage')
	},
	// 将某会话下所有未读消息已读上报
	message_read(id) {
		return new Promise((resolve,reject) => {
			if (id){
				let promise = this.tim.setMessageRead({conversationID: 'C2C'+ id});
				promise.then(function(imResponse) {
				  // 已读上报成功，指定 ID 的会话的 unreadCount 属性值被置为0
				  resolve(imResponse)
				}).catch(function(imError) {
				  // 已读上报失败
				  reject('setMessageRead error:', imError)
				});
			}else {
				reject('参数缺失')
			}
		})
	},
	// 发送消息 type= 1 文字消息 type= 2 图片消息
	send_message(res, type = 1) {
		// console.log(res,type);
		//console.log(res,type);
		return new Promise((resolve, reject) => {
			let message
			if (type == 1){
				// console.log('text');
				message = this.tim.createTextMessage({
					to: res.to,
					conversationType: 'C2C',
					// 消息优先级，用于群聊（v2.4.2起支持）。如果某个群的消息超过了频率限制，后台会优先下发高优先级的消息，详细请参考：https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6)
					// 支持的枚举值：TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL（默认）, TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST
					// priority: TIM.TYPES.MSG_PRIORITY_NORMAL,
					payload: {
						text: res.text
					}
				});
			}else if (type == 2){
				message = this.tim.createImageMessage({
					to: res.to,
					conversationType: TIM.TYPES.CONV_C2C,
					payload: { file: res.file },
					onProgress: function(event) { console.log('file uploading:', event) }
				});
			}
			// 2. 发送消息
			let promise = this.tim.sendMessage(message);
			promise.then(function(imResponse) {
				// console.log('发送成功');
			  // 发送成功
			  resolve(imResponse);
			}).catch(function(imError) {
			  // 发送失败
			  reject('sendMessage error:', imError)
			});
		})
	},


	// 更新个人信息
	updateMyInfo(opt) {
		opt.nick = opt.nick || '未命名',
		opt.avatar = opt.avatar || 'https://ds.ds678.com.cn/static/images/avatar.png'
		// 修改个人标配资料
		let promise = this.tim.updateMyProfile(opt);
		promise.then(function(imResponse) {
			// console.log('更新资料成功',imResponse.data); // 更新资料成功
		}).catch(function(imError) {
			console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
		});
	},

	// 获取个人信息
	getMyInfo() {
		return new Promise((resole,reject) => {
			let promise = this.tim.getMyProfile();
			promise.then(function(imResponse) {
			  //console.log(imResponse.data); // 个人资料 - Profile 实例
			  resole(imResponse.data)
			}).catch(function(imError) {
			  reject('getMyProfile error:', imError); // 获取个人资料失败的相关信息
			});
		})
	},
	// 获取指定用户信息
	getUserPro(arr) {
		for (var i = 0; i < arr.length; i++) {
			arr[i] = arr[i].toString()
		}
		return new Promise((resole,reject) => {
			let promise = this.tim.getUserProfile({
				 userIDList: arr
			});
			promise.then(function(imResponse) {
			  //console.log(imResponse.data); // 个人资料 - Profile 实例
			  resole(imResponse.data)
			}).catch(function(imError) {
			  reject('getMyProfile error:', imError); // 获取个人资料失败的相关信息
			});
		})
	},
	// 获取消息列表
	getMessageList(toId,next = '1') {
		return new Promise((resolve,reject) => {
			let promise = this.tim.getMessageList({conversationID: 'C2C'+toId,next , count: 15});
			promise.then(function(imResponse) {
			  // const messageList = imResponse.data.messageList; // 消息列表。
			  // const nextReqMessageID = imResponse.data.nextReqMessageID; // 用于续拉，分页续拉时需传入该字段。
			  // const isCompleted = imResponse.data.isCompleted; // 表示是否已经拉完所有消息。
			  resolve(imResponse.data)
			});
		})
	},
	// 获取会话列表
	getConversationList() {
		return new Promise((resolve,reject) => {
			let promise = this.tim.getConversationList();
			promise.then(function(imResponse) {
				//const conversationList = imResponse.data.conversationList; // 会话列表，用该列表覆盖原有的会话列表
				resolve(imResponse.data.conversationList)
			}).catch(function(imError) {
			  console.warn('getConversationList error:', imError); // 获取会话列表失败的相关信息
			});
		})
	},
	async deleteConversation(id) {
		let imResponse = await this.tim.deleteConversation('C2C'+ id);
		// console.log(imResponse);
		return imResponse.data
	}
}
